home *** CD-ROM | disk | FTP | other *** search
/ Network Support Library / RoseWare - Network Support Library.iso / btrieve / bfile.arc / SIZES.PAS < prev   
Pascal/Delphi Source File  |  1986-06-16  |  2KB  |  62 lines

  1. PROGRAM Sizes;
  2.  
  3.   {
  4.   | Purpose:  Calculate data sizes for Btrieve
  5.   | Author:   David A. Peterson
  6.   | Created:  31 March 1986
  7.   | Modified: Listed most recent first
  8.   }
  9.  
  10.   VAR
  11.     Unique        : Boolean;
  12.     Loc           : Byte;
  13.     Ch            : Char;
  14.     DataPages     : Real;
  15.     NumRecs       : Real;
  16.     PageSize      : Real;
  17.     RecLen        : Real;
  18.     NumDupKeys    : Real;
  19.     IndexPages    : ARRAY [1 .. 24] OF Real;
  20.     NumUniqueKeys : Real;
  21.     KeyLen        : Real;
  22.     TotalPages    : Real;
  23.     FileSize      : Real;
  24.     NumKeys       : Byte;
  25.  
  26.   BEGIN { Sizes }
  27.     WriteLn ('Btrieve File Size');
  28.     WriteLn;
  29.     Write ('Number of records : ');
  30.     ReadLn (NumRecs);
  31.     Write ('Page size (512n)  : ');
  32.     ReadLn (PageSize);
  33.     Write ('Record Length     : ');
  34.     ReadLn (RecLen);
  35.     Write ('Number of keys    : ');
  36.     ReadLn (NumKeys);
  37.     NumDupKeys := 0;
  38.     FOR Loc := 1 TO NumKeys DO
  39.       BEGIN
  40.         WriteLn ('For key ', Loc);
  41.         Write ('Key Length : ');
  42.         ReadLn (KeyLen);
  43.         Write ('Is key unique ? ');
  44.         ReadLn (Ch);
  45.         Unique := UpCase (Ch) = 'Y';
  46.         IF Unique THEN
  47.           IndexPages[Loc] := (NumKeys       / ( (PageSize - 12) / (KeyLen +  8) ) ) * 2
  48.         ELSE
  49.           BEGIN
  50.             NumDupKeys := NumDupKeys + 1;
  51.             Write ('How many Unique Key values ? ');
  52.             ReadLn (NumUniqueKeys);
  53.             IndexPages[Loc] := (NumUniqueKeys / ( (PageSize - 12) / (KeyLen + 12) ) ) * 2
  54.           END
  55.       END;
  56.     DataPages  := NumRecs / ( (PageSize - 6) / (RecLen + (8 * NumDupKeys) ) );
  57.     TotalPages := 1 + Round (DataPages + 0.5);
  58.     FOR Loc := 1 TO NumKeys DO
  59.       TotalPages := TotalPages + Round (IndexPages[Loc] + 0.5);
  60.     FileSize := TotalPages * PageSize;
  61.     Write ('File size ', FileSize:9:0)
  62.   END   { Sizes }.